home *** CD-ROM | disk | FTP | other *** search
- #define CURSES_LIBRARY 1
- #include <curses.h>
-
-
- #ifdef PDCDEBUG
- char *rcsid__shadows = "$Header: k:/tools/src/curses/private/rcs/_shadow.c 2.1.0.1 93/08/13 14:19:49 frotz Beta2 $";
- #endif
-
-
-
-
- /*man-start*********************************************************************
-
- PDC_shadows() - generate shadows inside wnoutrefresh().
-
- PDCurses Description:
- This is a private PDCurses function.
-
- Generates a shadow in the opposite direction of the window's light source.
- Uses the specified window's shadow character/attribute to create the
- shadow. The shadow is cast onto the window bg.
-
- PDCurses Return Value:
- This routine returns OK.
-
- PDCurses Errors:
- No errors are defined for this routine.
-
- Portability:
- PDCurses int PDC_shadows( WINDOW* w, WINDOW* bg );
-
- **man-end**********************************************************************/
-
- int PDC_shadows( WINDOW* w, WINDOW* bg )
- {
- int sy;
- int sx;
- int ey;
- int ex;
- int i;
- bool skip = FALSE;
-
- switch (w->_shadow)
- {
- case NORTH_EAST:
- sy = w->_begy + w->_maxy;
- sx = w->_begx-1;
- ex = w->_begx + w->_maxx-1;
- break;
-
- case NORTH_WEST:
- sy = w->_begy + w->_maxy;
- sx = w->_begx+1;
- ex = w->_begx + w->_maxx+1;
- break;
-
- case NORTH:
- sy = w->_begy + w->_maxy;
- sx = w->_begx;
- ex = w->_begx + w->_maxx;
- break;
-
- case SOUTH_EAST:
- sy = w->_begy-1;
- sx = w->_begx-1;
- ex = w->_begx + w->_maxx-1;
- break;
-
- case SOUTH_WEST:
- sy = w->_begy-1;
- sx = w->_begx+1;
- ex = w->_begx + w->_maxx+1;
- break;
-
- case SOUTH:
- sy = w->_begy-1;
- sx = w->_begx;
- ex = w->_begx + w->_maxx;
- break;
-
- case EAST:
- case WEST:
- default:
- skip = TRUE;
- break;
- }
- if (!skip)
- {
- for( i=sx; i<ex; i++ )
- {
- mvwaddrawch( bg, sy, i, w->_shadow_char );
- }
- }
-
- skip = FALSE;
- switch (w->_shadow)
- {
- case NORTH_EAST:
- sx = w->_begx-1;
- sy = w->_begy+1;
- ey = w->_begy+w->_maxy;
- break;
-
- case SOUTH_EAST:
- sx = w->_begx-1;
- sy = w->_begy-1;
- ey = w->_begy+w->_maxy-1;
- break;
-
- case EAST:
- sx = w->_begx-1;
- sy = w->_begy;
- ey = w->_begy+w->_maxy;
- break;
-
- case NORTH_WEST:
- sx = w->_begx+w->_maxx;
- sy = w->_begy+1;
- ey = w->_begy+w->_maxy;
- break;
-
- case SOUTH_WEST:
- sx = w->_begx+w->_maxx;
- sy = w->_begy-1;
- ey = w->_begy+w->_maxy-1;
- break;
-
- case WEST:
- sx = w->_begx+w->_maxx;
- sy = w->_begy;
- ey = w->_begy+w->_maxy;
- break;
-
- case NORTH:
- case SOUTH:
- default:
- skip = TRUE;
- break;
- }
- if (!skip)
- {
- for( i=sy; i<ey; i++ )
- {
- mvwaddrawch( bg, i, sx, w->_shadow_char );
- }
- }
- return( OK );
- }
-